﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionaleLib.Controller;
using GestionaleLib;

namespace Leaf.View.Prodotti
{
    public partial class frmAggiungiProdotto : Form
    {
        //private frmElencoProdotti RifElencoProdotti;
        private Form RifElencoProdotti;
        private Prodotto Prodotto;
        private FormStatus.StatoForm StatoForm;

        public frmAggiungiProdotto(Form RifElencoProdotti, 
            Prodotto ProdottoModifica=null, FormStatus.StatoForm StatoForm= FormStatus.StatoForm.Nuovo)
        {
            InitializeComponent();
            this.RifElencoProdotti = RifElencoProdotti;
            if (ProdottoModifica != null)
                this.Prodotto = ProdottoModifica;
            this.StatoForm = StatoForm;
            CaricaCombo();
            ImpostaStato();
        }
        public void CaricaListaInDettaglio(List<ProdottoDettaglio> ListaDettagli)
        {
            if (Prodotto != null)
                Prodotto.Dettagli = ListaDettagli;
        }
        private void ImpostaStato()
        {
            switch (StatoForm)
            {
                case FormStatus.StatoForm.Nuovo:
                    this.Text = "Nuovo Prodotto";
                    Prodotto = new Prodotto(); //CREO UN NUOVO GUID PER IL PRODOTTO
                    Prodotto.Dettagli = new List<ProdottoDettaglio>(); //INIZALIZZO LA LISTA DEI DETTAGLI
                    txtQtaMinima.Text = "" + Properties.Settings.Default.NumeroMinimoGiacenza;
                    break;
                case FormStatus.StatoForm.Modifica:
                    this.Text = "Modifica Prodotto";
                    groupCaricoMagazzino.Enabled = false;
                    txtCodice.Enabled = false;
                    LeggiCampiModifica();
                    break;
            }
        }
        private void LeggiCampiModifica()
        {
            txtCodice.Text = "" + Prodotto.Codice;
            txtDescrizione.Text = "" + Prodotto.Descrizione;
            txtCodiceBarre.Text = "" + Prodotto.BarCode;
            txtPrezzo.Text = "" + Convert.ToString(Prodotto.Prezzo);
            txtQtaMinima.Text = "" + Convert.ToString(Prodotto.MinimoMagazzino);
            cmbAliquota.SelectedItem = (GestionaleLib.Aliquota)Prodotto.Aliquota;
            cmbTaglia.SelectedItem = (Taglia)Prodotto.Taglia;
            cmbColore.SelectedItem = (Colore)Prodotto.Colore;
            cmbParametro.SelectedItem = (Parametro)Prodotto.Parametro;
            txtQtaMinima.Text = "" + Prodotto.MinimoMagazzino;
            cmbFornitore.SelectedItem = (Fornitore)Prodotto.Fornitore;
        }
        private void VerificaProdottoEsistente()
        {
            if (!txtCodice.Equals("") && 
                this.StatoForm== FormStatus.StatoForm.Nuovo)
            {
                if (new ctrlProdotti().ProdottoEsistente(txtCodice.Text) != null)
                {
                    MessageBox.Show("Il codice digitato  esiste già per un altro prodotto"
                        , "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCodice.Focus();
                }
            }
        }
        private void CaricaCombo()
        {
            cmbAliquota.DataSource = null;
            cmbAliquota.DataSource = new ctrlAliquote().Seleziona();

            cmbTaglia.DataSource = null;
            cmbTaglia.DataSource = new ctrlTaglie().Seleziona();
            cmbTaglia.SelectedIndex = -1;

            cmbColore.DataSource = null;
            cmbColore.DataSource = new ctrlColori().Seleziona();
            cmbColore.SelectedIndex = -1;

            cmbParametro.DataSource = null;
            cmbParametro.DataSource = new ctrlParametri().Seleziona();
            cmbParametro.SelectedIndex = -1;

            cmbFornitore.DataSource = null;
            cmbFornitore.DataSource = new ctrlFornitori().Seleziona();
            cmbFornitore.SelectedIndex = -1;
        }
        private void cmdAnnulla_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void txtCodice_Validated(object sender, EventArgs e)
        {
            VerificaProdottoEsistente();
        }
        private void SalvaProdotto()
        {
            try
            {
                if (!txtCodice.Text.Trim().Equals(""))
                {
                    Prodotto.Codice = txtCodice.Text;
                    Prodotto.Descrizione = txtDescrizione.Text;
                    Prodotto.BarCode = txtCodiceBarre.Text;
                    Prodotto.Aliquota = (GestionaleLib.Aliquota)cmbAliquota.SelectedItem;
                    Prodotto.Prezzo = Convert.ToDouble(txtPrezzo.Text);
                    Prodotto.Taglia = (Taglia)cmbTaglia.SelectedItem;
                    Prodotto.Colore = (Colore)cmbColore.SelectedItem;
                    Prodotto.Parametro = (Parametro)cmbParametro.SelectedItem;
                    Prodotto.MinimoMagazzino = Convert.ToInt16(txtQtaMinima.Text);
                    Prodotto.Fornitore = (Fornitore)cmbFornitore.SelectedItem;

                    if (StatoForm == FormStatus.StatoForm.Nuovo)
                    {
                        new ctrlProdotti().Nuovo(Prodotto);
                        new ctrlProdottiDettagli(Prodotto).Nuovo();
                        if (chkCaricaAutom.Checked)
                        {
                            //carica il prodotto solo in mod.nuovo
                            if (txtQuantitaCarico.Text.Trim().Equals(""))
                            {
                                MessageBox.Show("Il valore quantità di carico inserito non è valido");
                                return;
                            }
                            GestionaleLib.Magazzino MovimentoMagazzino = new GestionaleLib.Magazzino();
                            MovimentoMagazzino.Prodotto = Prodotto;
                            MovimentoMagazzino.Causale = "CA";
                            MovimentoMagazzino.Data = DateTime.Now;
                            MovimentoMagazzino.Quantita = Convert.ToInt16(txtQuantitaCarico.Text);
                            new ctrlMagazzino().Carica(MovimentoMagazzino);
                        }
                    }
                    else if (StatoForm == FormStatus.StatoForm.Modifica)
                    {
                        new ctrlProdotti().Modifica(Prodotto);
                        new ctrlProdottiDettagli(null).Cancella(Prodotto);
                        new ctrlProdottiDettagli(Prodotto).Nuovo();
                    }
                    //RifElencoProdotti.Aggiorna();
                    this.Close();
                }
                else
                    MessageBox.Show("Il campo codice non è valido");
            }
            catch (FormatException)
            {
                MessageBox.Show("Il formato dei valori inseriti non è corretto");
            }
            catch (ExceptionErroreInserimento)
            {
                MessageBox.Show("Errore durante la procedura");
            }
        }
        private void cmdSalva_Click(object sender, EventArgs e)
        {
            SalvaProdotto();
        }
        private void txtPrezzo_Validating(object sender, CancelEventArgs e)
        {
            if (!txtPrezzo.Text.Equals(""))
            {
                txtPrezzo.Text = txtPrezzo.Text.Replace(".", ",");
            }
        }
        private void cmdDettagli_Click(object sender, EventArgs e)
        {
            if (Prodotto != null &&
                StatoForm == FormStatus.StatoForm.Modifica)
            {
                frmProdottoDettaglio frm = new frmProdottoDettaglio(this, StatoForm
                    , new ctrlProdottiDettagli(null).ProdottoById(Prodotto.Id));
                frm.MdiParent = this.MdiParent;
                frm.Show();
            }
            else if (Prodotto != null &&
                StatoForm == FormStatus.StatoForm.Nuovo)
            {
                frmProdottoDettaglio frm = new frmProdottoDettaglio(this, StatoForm
                    , Prodotto.Dettagli);
                frm.MdiParent = this.MdiParent;
                frm.Show();
            }
        }
        private void txtCodice_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Char.ToUpper(e.KeyChar);
        }
        private void txtDescrizione_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Char.ToUpper(e.KeyChar);
        }
        private void chkCaricaAutom_CheckedChanged(object sender, EventArgs e)
        {
            txtQuantitaCarico.Enabled = chkCaricaAutom.Checked;
        }
    }
}
